博客
关于我
system()函数的setuid程序得不到root的权限;system()函数的suid失效问题
阅读量:201 次
发布时间:2019-02-28

本文共 2177 字,大约阅读时间需要 7 分钟。

system()函数的setuid程序得不到root的权限;system()函数的suid失效问题

相关背景:

老师上课讲了setuid程序;但是在调用system()函数时setuid不起作用

相关文章:


问题描述:

对调用system()函数的程序catall.c 如下;当设置根用户setuid权限后,理想情况下这个程序应该运行 /bin/cat 程序,可以查看所有的文件,但不能写入任何文件

/* catall.c */#include 
#include
#include
int main(int argc, char const *argv[]){ char *cat = "/bin/cat"; if(argc<2) { printf("please type a file name.\n"); return 1; } char *command = malloc(strlen(cat) + strlen(argv[1] + 2)); sprintf(command,"%s %s",cat,argv[1]); system(command); return 0;}
ppt 上的运行示例:可以成功拿到root权限,查看/etc/shadow 文件

在这里插入图片描述

实际运行结果:还是显示permission denied。。。明明前面 ls -l 显示属主是 root 且运行位是 s。。。说明这里的 setuid不起作用了。

在这里插入图片描述

最离谱的是,同一程序的系统调用,使用不同的函数,结果不一样,函数 execve() 的系统调用可以照常拿到 root 权限

在这里插入图片描述
在这里插入图片描述


原因分析:

linux 上直接 man system,得到的解释是:

DESCRIPTION   The  system()  library  function uses fork(2) to create a child process that   executes the shell command specified in command using execl(3) as follows:       execl("/bin/sh", "sh", "-c", command, (char *) NULL);   system() returns after the command has been completed.   During execution of the command, SIGCHLD will be  blocked,  and  SIGINT  and   SIGQUIT will be ignored, in the process that calls system().  (These signals   will be handled according to their defaults inside the  child  process  that   executes command.)   If  command  is  NULL,  then  system() returns a status indicating whether a   shell is available on the system.

应该就是fork一个子进程,然后调用execl("/bin/sh", “sh”, “-c”, command, (char *) NULL); 去执行命令。

直接用 execl() 函数试一下

在这里插入图片描述

在这里插入图片描述

下面显示有euid=0,说明execve() 拿到 root 执行权限,而上面 execl() 跟system() 一样没有执行位权限

这里再试一下 execl() 函数直接用 /bin/id 不通过 /bin/shell;
在这里插入图片描述
在这里插入图片描述
execl() 函数拿到了 root 的执行权限 euid=0;所以问题应该在/bin/sh 上。应该是setuid程序不能将root权限传给/bin/sh;很容易理解,因为这样非常不安全

老师PPT中有解释

在Ubuntu 16.04中,/bin/sh指向/bin/dash,这有一个对策:当它在set-uid进程中执行时,它将删除特权。因此,在以上的攻击中,我们只会得到一个普通shell

A Note

• In Ubuntu 16.04, /bin/sh points to /bin/dash, which has a countermeasure
• It drops privilege when it is executed inside a set-uid process
• Therefore, we will only get a normal shell in the attack on the previous slide


解决方案:

Do the following to remove the countermeasure

在这里插入图片描述
这里将 /bin/sh指向 /bin/zsh;
zsh是一个功能强大的shell,笔者由于没有安装zsh,就没有试过。安装之后应该解决完成问题

转载地址:http://hfhc.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>